#ifndef IMPROVED_PREDICTION_FACTORY_H_
#define IMPROVED_PREDICTION_FACTORY_H_

#include "PFactory.hh"

//
/**
 * \file IPFactory.hh
 * \author  jsk <jsk.jinsubkim@gmail.com>
 * \version 1.0
 *
 * \class IPFactory IPFactory.hh
 *
 * Prediction Factory를 개선하였다.
 */
class IPFactory : public PFactory
{
public:
	/**
	 * \name IPFactory
	 */
	IPFactory(TimeoutQueue* AssignedQueue);
	
	/**
	 * \name predictNumOfWorker
	 * 
	 * 스레드의 개수를 예측한다.
	 * 
	 * 만약 스레드가 증가할거라고 예측 한 경우에 스레드를 제거하지 못 하게 한다.
	 * 
	 * \return 
	 * 
	 * 예측한 스레드의 개수.
	 * 'Misprediction'을 반환한 경우 예측을 하지 않았음을 알린다.
	 */
	virtual USNumber predictNumOfWorker();
	
// Member
protected:
	/**
	 * 실제 최소 워커 개수.
	 * 
	 * 스레드가 제거되는 것을 방지하기 위해서 최소 워커 개수를 최대 값으로 변경하는데,
	 * 복구하기 위해서 실제 최소 워커 개수를 보관한다.
	 */
	USNumber RealMinNumOfWorker;
};

#endif //IMPROVED_PREDICTION_FACTORY_H_